package br.com.werp.regras.almoxarifado;

import br.com.werp.regras.almoxarifado.controle.ControleAjuste;
import br.com.werp.regras.almoxarifado.controle.ControleAtendimento;
import br.com.werp.regras.almoxarifado.controle.ControleBloqueio;
import br.com.werp.regras.almoxarifado.controle.ControleEntrada;
import br.com.werp.regras.almoxarifado.controle.ControleGrupo;
import br.com.werp.regras.almoxarifado.controle.ControleMercadoria;
import br.com.werp.regras.almoxarifado.controle.ControleProduto;
import br.com.werp.regras.almoxarifado.controle.ControleRelatorioFichaEstoque;
import br.com.werp.regras.almoxarifado.controle.ControleRelatorioFichaEstoqueResumido;
import br.com.werp.regras.almoxarifado.controle.ControleRelatorioGrupo;
import br.com.werp.regras.almoxarifado.controle.ControleRelatorioSaidaSetor;
import br.com.werp.regras.almoxarifado.controle.ControleRequisicao;
import br.com.werp.regras.geral.Almoxarifado;
import br.com.werp.regras.geral.ErroPadrao;
import br.com.werp.regras.geral.GerenciadorErros;
import br.com.werp.regras.geral.vos.relatorio.RelatorioVO;

import org.apache.struts.action.ActionForm;

import java.util.List;
import java.util.Map;


/**
 * @author Sobreira
 * Criado em 11/10/2005
 */
public class AlmoxarifadoImpl implements Almoxarifado {
    private static AlmoxarifadoImpl almoxarifadoImpl;
    private ControleMercadoria controleMercadoria = new ControleMercadoria();
    private ControleEntrada controleEntrada = new ControleEntrada();
    private ControleRequisicao controleRequisicao = new ControleRequisicao();
    private ControleProduto controleProduto = new ControleProduto();
    private ControleAtendimento controleAtendimento = new ControleAtendimento();
    private ControleAjuste controleAjuste = new ControleAjuste();
    private ControleRelatorioFichaEstoque controleRelatorio = new ControleRelatorioFichaEstoque();
    private ControleRelatorioFichaEstoqueResumido controleRelatorioFichaEstoqueResumido =
        new ControleRelatorioFichaEstoqueResumido();
    private ControleRelatorioGrupo controleRelatorioGrupo = new ControleRelatorioGrupo();
    private ControleRelatorioSaidaSetor controleRelatorioSaidaSetor = new ControleRelatorioSaidaSetor();
    private ControleBloqueio controleBloqueio = new ControleBloqueio();
    private ControleGrupo controleGrupo = new ControleGrupo();

    private AlmoxarifadoImpl() {
    }

    public static AlmoxarifadoImpl getAlmoxarifadoImpl() {
        if (almoxarifadoImpl == null) {
            almoxarifadoImpl = new AlmoxarifadoImpl();
        }

        return almoxarifadoImpl;
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#manterMercadoriaProduto(java.lang.Object, java.lang.String)
     */
    public void manterMercadoriaProduto(Object form, String usuario,
        String filial) throws ErroPadrao {
        try {
            controleMercadoria.manterMercadoriaProduto(form, usuario, filial);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#pesquisarMercadoriaProduto(java.lang.Object, java.lang.String)
     */
    public List pesquisarMercadoriaProduto(Object form)
        throws ErroPadrao {
        try {
            return controleMercadoria.pesquisarMercadoriaProduto(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#carregarMercadoriaProduto(java.lang.Object)
     */
    public void carregarMercadoriaProduto(Object form)
        throws ErroPadrao {
        try {
            controleMercadoria.carregarMercadoriaProduto(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#manterListaMercadoria(java.lang.Object, java.util.List)
     */
    public void manterListaMercadoria(Object form, List itens, String filial)
        throws ErroPadrao {
        try {
            controleMercadoria.manterListaMercadoria(form, itens, filial);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#persistirEntradaMercadoria(java.lang.Object, java.util.List)
     */
    public void persistirEntradaMercadoria(Object form, List itens,
        String usuario) throws ErroPadrao {
        try {
            controleEntrada.persistirEntradaMercadoria(form, itens, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#pesquisarEntradaItem(java.lang.Object)
     */
    public List pesquisarEntrada(Object form) throws ErroPadrao {
        try {
            return controleEntrada.pesquisarEntrada(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#carregarEntradaItem(java.lang.Object)
     */
    public void carregarEntrada(Object form, String filial, List entrada_itens)
        throws ErroPadrao {
        try {
            controleEntrada.carregarEntrada(form, filial, entrada_itens);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#setarDataSaida(java.lang.Object)
     */
    public void setarDataSaida(Object form) throws ErroPadrao {
        try {
            controleRequisicao.setarDataSaida(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#manterListaProduto(java.lang.Object, java.util.List)
     */
    public void manterListaProduto(Object form, List produtos)
        throws ErroPadrao {
        try {
            controleProduto.manterListaProduto(form, produtos);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#persistirSaida(java.lang.Object, java.lang.String, java.util.List)
     */
    public void persistirSaida(Object form, String usuario, List produtos)
        throws ErroPadrao {
        try {
            controleRequisicao.persistirSaida(form, usuario, produtos);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#pesquisarSaidas(java.lang.Object)
     */
    public List pesquisarSaidas(Object form) throws ErroPadrao {
        try {
            return controleRequisicao.pesquisarSaidas(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#carregarRequisicao(java.lang.Object, java.util.List)
     */
    public void carregarRequisicao(Object form, List produtos)
        throws ErroPadrao {
        try {
            controleRequisicao.carregarRequisicao(form, produtos);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#efetuarAtendimento(java.lang.Object, java.util.List, java.util.Map, java.lang.String)
     */
    public void efetuarAtendimento(Object form, List produtos, Map paramentros,
        String usuario) throws ErroPadrao {
        try {
            controleAtendimento.efetuarAtendimento(form, produtos, paramentros,
                usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#persistirAjustes(java.lang.Object, java.lang.String)
     */
    public void persistirAjustes(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleAjuste.persistirAjuste(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#PesquisarAjustes(java.lang.Object, java.util.List)
     */
    public List pesquisarAjustes(Object form) throws ErroPadrao {
        try {
            return controleAjuste.pesquisarAjustes(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#carregarFormularioAjuste(org.apache.struts.action.ActionForm, java.util.List)
     */
    public void carregarFormularioAjuste(Object form) throws ErroPadrao {
        try {
            controleAjuste.carregarFormularioAjuste(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#gerarRelatorioFichaEstoque(java.lang.Object, java.lang.String)
     */
    public RelatorioVO gerarRelatorioFichaEstoque(Object form,
        String requisitor, String empresa) throws ErroPadrao {
        try {
            return controleRelatorio.gerarRelatorioFichaEstoque(form,
                requisitor, empresa);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void carregarConfirmRequisicao(Object form, String usuario,
        List produtos) throws ErroPadrao {
        try {
            controleRequisicao.carregarConfirmRequisicao(form, usuario, produtos);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public RelatorioVO gerarComprovanteAtendimento(Object form, List produtos,
        String usuario) throws ErroPadrao {
        try {
            return controleAtendimento.gerarComprovanteAtendimento(form,
                produtos, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void salvarSaida(Object form, String usuario, Map parametros,
        List produtos) throws ErroPadrao {
        try {
            controleRequisicao.salvarSaida(form, usuario, parametros, produtos);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#gerarRelatorioFichaEstoqueResumido(java.lang.Object, java.lang.String)
     */
    public RelatorioVO gerarRelatorioFichaEstoqueResumido(Object form,
        String requisitor, String empresa) throws ErroPadrao {
        try {
            return controleRelatorioFichaEstoqueResumido.gerarRelatorioFichaEstoqueResumido(form,
                requisitor, empresa);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /* (non-Javadoc)
     * @see br.com.werp.regras.geral.Almoxarifado#gerarRelatorioGrupo(java.lang.Object, java.lang.String)
     */
    public RelatorioVO gerarRelatorioGrupo(Object form, String requisitor,
        String empresa) throws ErroPadrao {
        try {
            return controleRelatorioGrupo.gerarRelatorioGrupo(form, requisitor,
                empresa);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public RelatorioVO gerarRelatorioSaidaSetor(Object form, String requisitor)
        throws ErroPadrao {
        try {
            return controleRelatorioSaidaSetor.gerarRelatorioSaidaSetor(form,
                requisitor);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public RelatorioVO gerarRelatorioGrupoValor(Object form, String requisitor,String empresa)
        throws ErroPadrao {
        try {
            return controleRelatorioGrupo.gerarRelatorioGrupoValor(form,
                requisitor,empresa);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void efetuarBloqueio(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleBloqueio.efetuarBloqueio(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List obterBloqueios(Object form) throws ErroPadrao {
        try {
            return controleBloqueio.obterBloqueios(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void excluirBloqueio(Object form, List bloqueios, String usuario)
        throws ErroPadrao {
        try {
            controleBloqueio.excluirBloqueio(form, bloqueios, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void salvarMercadoria(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleMercadoria.salvarMercadoria(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List pesquisarMercadorias(Object form) throws ErroPadrao {
        try {
            return controleMercadoria.pesquisarMercadorias(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void carregarMercadorias(Object form) throws ErroPadrao {
        try {
            controleMercadoria.carregarMercadoria(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void salvarProduto(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleProduto.salvarProduto(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void carregarProdutos(Object form) throws ErroPadrao {
        try {
            controleProduto.carregarProdutos(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List pesquisarProdutos(Object form) throws ErroPadrao {
        try {
            return controleProduto.pesquisarProdutos(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void salvarGrupo(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleGrupo.salvarGrupo(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List pesquisarGrupos(Object form) throws ErroPadrao {
        try {
            return controleGrupo.pesquisarGrupos(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void carregarGrupos(Object form) throws ErroPadrao {
        try {
            controleGrupo.carregarGrupos(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List pesquisaProduto(Object form) throws ErroPadrao {
        try {
            return controleMercadoria.pesquisarProduto(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }
}
